package cn.stylefeng.guns.modular.gridsystem.service;


import cn.stylefeng.guns.core.pojo.page.PageResult;
import cn.stylefeng.guns.modular.gridsystem.entity.GatewayTask;
import cn.stylefeng.guns.modular.gridsystem.model.param.GatewayTaskParam;
import cn.stylefeng.guns.modular.gridsystem.model.result.GatewayTaskResult;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 网关任务下发表 服务类
 *
 * @author 乔李莱莱
 * @since 2023/10/17
 */
public interface GatewayTaskService extends IService<GatewayTask> {

    /**
     * 分页查询网关任务下发表
     *
     * @param param
     * @author 乔李莱莱
     * @since 2023/10/17
     */
    PageResult<GatewayTaskResult> page(GatewayTaskParam param);

    /**
     * 分页查询网关任务下发表
     *
     * @param param
     * @author 乔李莱莱
     * @since 2023/10/17
     */
    PageResult<GatewayTaskResult> pageTaskList(GatewayTaskParam param);

    /**
     * 添加网关任务下发表
     *
     * @param param
     * @author 乔李莱莱
     * @since 2023/10/17
     */
    void add(GatewayTaskParam param);

    /**
     * 添加任务
     *
     * @param taskType  任务类型
     * @param gatewayId 网关集合
     * @param taskParam 任务参数
     */
    Long add(String taskType, Integer gatewayId, String taskParam);

    /**
     * 添加任务
     *
     * @param taskType
     * @param gatewayIds
     * @param taskParam
     * @return
     */
    Long add(String taskType, List<Integer> gatewayIds, String taskParam);

    /**
     * 删除网关任务下发表
     *
     * @param param
     * @author 乔李莱莱
     * @since 2023/10/17
     */
    void delete(GatewayTaskParam param);

    /**
     * 编辑网关任务下发表
     *
     * @param param
     * @author 乔李莱莱
     * @since 2023/10/17
     */
    void edit(GatewayTaskParam param);

    /**
     * 下发任务
     *
     * @param param
     * @author 乔李莱莱
     * @since 2023/10/17
     */
    void issued(GatewayTaskParam param);

    /**
     * 撤回任务
     *
     * @param param
     * @author 乔李莱莱
     * @since 2023/10/17
     */
    void rollback(GatewayTaskParam param);

    /**
     * 查看详情网关任务下发表
     *
     * @author 乔李莱莱
     * @since 2023/10/17
     */
    GatewayTask detail(GatewayTaskParam param);


    /**
     * 查询当天已下发状态的任务
     *
     * @author 乔李莱莱
     * @since 2023/10/17
     */
    List<GatewayTask> getTodayGatewayTask(GatewayTaskParam param);

    /**
     * 上报任务执行的回执
     *
     * @author 乔李莱莱
     * @since 2023/10/17
     */
    void callbackGatewayTask(GatewayTaskParam param);
}
